﻿// utils.js
import { 
    MIN_CODE_SPEED, MAX_CODE_SPEED, DEFAULT_CODE_SPEED,
    DOT_DURATION_MULTIPLIER, SPEED_WPM_RATIO
} from './constants.js';

/**
 * 验证整数输入
 * @param {HTMLInputElement} inputElement - 输入元素
 * @param {number} min - 最小值
 * @param {number} max - 最大值
 * @param {number} defaultValue - 默认值
 */
export function validateInt(inputElement, min, max, defaultValue) {
    let value = parseInt(inputElement.value);
    
    if (isNaN(value)) {
        inputElement.value = defaultValue;
    } else if (value < min) {
        inputElement.value = min;
    } else if (value > max) {
        inputElement.value = max;
    }
}

/**
 * 计算点信号时长（毫秒）基于WPM
 * @param {number} wpm - 每分钟字数
 * @returns {number} 点信号持续时间
 */
export function calculateDotDuration(wpm) {
    return DOT_DURATION_MULTIPLIER / wpm;
}

/**
 * 生成字码
 * @param {number} length - 生成长度
 * @returns {string} 随机字母字符串
 */
export function generateRandomLetters(length) {
    let result = '';
    for (let i = 0; i < length; i++) {
        result += LETTERS.charAt(Math.floor(Math.random() * LETTERS.length));
    }
    return result;
}

/**
 * 生成混码
 * @param {number} length - 生成长度
 * @returns {string} 随机混合字符串
 */
export function generateRandomMixed(length) {
    let result = '';
    for (let i = 0; i < length; i++) {
        result += ALPHANUMERIC.charAt(Math.floor(Math.random() * ALPHANUMERIC.length));
    }
    return result;
}

/**
 * 生成乱码组
 * @param {string} type - 类型（'letter'或'mixed'）
 * @param {number} count - 组数
 * @returns {string} 生成的随机报文
 */
export function generateRandomGroups(type, count) {
    let result = '[CALL] ';
    
    for (let i = 0; i < count; i++) {
        const groupLength = Math.floor(Math.random() * 4) + 3; // 3-6个字符
        let group = type === 'letter' ? 
            generateRandomLetters(groupLength) : 
            generateRandomMixed(groupLength);
        result += group + ' ';
    }
    
    return result.trim() + ' [END]';
}
